Category Theory
2015-11-25
Kommentare
抽空看了 Category Theory
有一種我到底看了什麼感覺
有點蛋疼 有點懂 有點不懂 有點有趣 有點WTF
反正整個五味雜成就是哩!
Category
首先,先提到 Category,以及事前準備(術語)
Category 到底有什麼東東
Category 會包含以下四個東東:
- Objects
- Morphisms 或稱 Arrows
- Associative Law
- Identity Law
Law
屬於數學用語,所以Category Theory 必須符合Associative Law & Identity Law
在不同的面向來看這四個東東會對應到不同的東西。
已程式設計來說,可能會是下面的對應
Math | 程式設計 |
---|---|
Objects | sets(types) |
Arrows | functions |
Associative Law | function composition |
Identity Law | identity function |
1 | func f(a:Int) -> Double { |
1 | func identity<T>(a:T) -> T { |
1 | public func ∘ <A,B,C> (f:(B -> C), g:(A -> B)) -> (A -> C) { |
Category 的 Laws
Category 必須遵循兩條 Lasw:
- Associative Law :
(f ∘ g) ∘ h = f ∘ (g ∘ h)
- Identity Law :
f ∘ identity = f = identity ∘ f
某 function f
g
h
:1
2
3f : A -> B
g : B -> C
h : C -> D
圖解定義
g(f(a)) = (g ∘ f)(a)
Associative Law
Identity Law
Functor
其實還是不懂,只好祭出 Haskell 定義
1 | class Functor f where |
Monoid
不是很懂。但他有一條 tip 提到,具有 0 to many 特性幾乎就是Monoid。
一樣先提 Monoid 的事前準備(術語)
Compose function •
:
1 | • : M × M -> M |
Identity function id
:
1 | id : M |
同樣 Monoid 也必須遵循兩條規則:
- Associative Law :
(f • g) • h = f • (g • h)
- Identity Law :
f • id = f = id • f
以下是個人理解
例如 Int 可以找到 compose function(加法) 以及 id (0)
0 + x = x = x + 0
Int 可以找到 compose function(乘法) 以及 id (1)
1 x = x = x 1
String 可以找到 compose function(字串串接) 以及 id (“”)
“” + “a” = “a” = “a” + “”
椅子的話就不符合這個條件,椅子+椅子 不等於 椅子
椅子堆反而可以
空椅子堆 + 椅子堆 = 椅子堆 = 椅子堆 + 空椅子堆